package com.ray.mapper;

import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.ibatis.annotations.Param;

import com.ray.bean.CompanyMaterialTableBean;
import com.ray.bean.CustomerBean;
import com.ray.bean.PurchaseOrderBean;
import com.ray.bean.PurchasePrintBean;
import com.ray.bean.UserBean;
import com.ray.bean.WarehouseInOutDetailBean;
import com.ray.pojo.AvailableCountPojo;
import com.ray.pojo.PurchaseOrderDetailPojo;

/**
 * 采购dao层
* <p>Title: PurchaseOrderMapper</p>  
* <p>Description: </p>  
* @author 李斌  
* @date 2018年9月13日
 */
public interface PurchaseOrderMapper {
	 
	/**
	 * 插入采购单
	* @date 2018年9月13日 上午10:14:24 
	* @author 李斌
	* @return int 
	* @throws
	 */
	int savePurchaseOrder(Map<String, Object> map);
	
	/**
	 * 查询采购单
	* @date 2018年9月13日 下午1:57:17  
	* @author 李斌
	* @return List<PurchaseOrderDetailPojo> 
	* @throws
	 */
	int getPurchaseOrderByPageCount(Map<String, Object> map);
	List<PurchaseOrderDetailPojo> getPurchaseOrderByPageData(Map<String, Object> map);
	
	/**
	 * 查询采购单通过订单编号和物料代码查相似订单
	* @date 2018年9月13日 下午3:25:12 
	* @author 李斌
	* @return List<PurchaseOrderDetailPojo> 
	* @throws
	 */
	List<PurchaseOrderDetailPojo> getAleradyPurchaseOrderByOrderAndMateiral(Map<String, Object> map);
	
	/**
	 * 修改采购单状态
	* @date 2018年9月14日 上午9:01:02 
	* @author 李斌
	* @return int 
	* @throws
	 */
	int setPurchaseOrderOnStatus(Map<String, String> map);
	
	/**
	 * 批量审批采购单
	* @date 2018年10月10日 下午2:38:57 
	* @author 李斌
	* @return void 
	* @throws
	 */
	int setAllPurchaseOrderOnStatus(Map<String, Object> map);
	
	/**
	 * 根据purchaseDetailId获取采购单
	* @date 2018年9月14日 上午9:17:49 
	* @author 李斌
	* @return PurchaseOrderBean 
	* @throws
	 */
	PurchaseOrderBean getPurchaseOrderByPurchaseDetailId(Map<String, String> map);
	
	/**
	 * 通过采购单获取出入库记录
	* @date 2018年9月14日 上午10:22:33 
	* @author 李斌
	* @return List<WarehouseInOutDetailBean> 
	* @throws
	 */
	List<WarehouseInOutDetailBean> getWarehouseInOutByPurchaseDetailId(Map<String, Object> purchaseMap);
	
	/**
	 * 获取未入库完成的采购单
	* @date 2018年9月14日 下午3:51:11 
	* @author 李斌
	* @return List<CompanyMaterialTableBean> 
	* @throws
	 */
	List<CompanyMaterialTableBean> getPurchaseOrderOnPurchaseWarehouseInData(Map<String, Object> map);
	int getPurchaseOrderOnPurchaseWarehouseInCount(Map<String, Object> map);
	
	/**
	 * 修改采购单isFinish
	* @date 2018年9月15日 下午2:00:12 
	* @author 李斌
	* @return void 
	* @throws
	 */ 
	void updatePurchaseOrderOnFinish(@Param("purchaseOrderBeanList") List<PurchaseOrderBean> purchaseOrderBeanList );
	
	/**
	 * 更新复期通过明细Id
	* @date 2018年10月4日 下午4:28:08 
	* @author 李斌
	* @return int 
	* @throws
	 */
	int updatePurchaseLaterPhaseByPurchaseDetailId(Map<String, Object> map);
	
	/**
	 * 获取采购单制单人
	* @date 2018年10月10日 下午2:44:42 
	* @author 李斌
	* @return List<String> 
	* @throws
	 */
	List<UserBean> getPurchaseOrderCreateUserIdsByPurchaseDetailList(Map<String, Object> map);
	
	//通过投料单id查询采购单
	PurchaseOrderBean getPurchaseOrderByFeedDetailId(Map<String, Object> feedDetailMap);
	
	//获取某物料可领数量
	double getReceiveCountByFeedCount(Map<String, Object> paramMap);
	
	//添加采购打印id与采购单号
	void addPurchasePrint(Map<String, Object> map);
	
	//通过采购打印id获取采购单明细Ids
	List<String> getPurchaseDetailIdByPtId(Map<String, Object> map);
	
	//通过采购单明细Ids获取相应的采购记录信息
	List<PurchasePrintBean> getPurchaseNoByPurchaseDetailIds(Map<String, Object> map);
	
	//获取采购单号
	Set<String> getPurchaseNoList(Map<String, Object> map);
	
	//获取物料可用数
	Map<String, Double> getMaterialAvailableCount(@Param("materialCode")String materialCode, @Param("loginCompany")String loginCompany);
	
	//获取物料的占用订单
	List<AvailableCountPojo> getMaterialUseCountByFeedData(@Param("materialCode")String materialCode, @Param("loginCompany")String loginCompany);

	/**
	 * 通过
	 * @param provideNameSet
	 * @param companyName
	 * @return
	 */
	List<CustomerBean> getSubCustomByCompanyAndParentName(@Param("provideNameSet")Set<String> provideNameSet,@Param("loginCompany") String companyName);

	List<PurchaseOrderDetailPojo> getPurchaseOrderForBackData(Map<String, Object> map);

	int getPurchaseOrderForBackCount(Map<String, Object> map);

}
